home *** CD-ROM | disk | FTP | other *** search
/ Java Primer Plus / Java Primer Plus (Waite Group Proess)(1996).iso / java_Win / demo / DitherTest / DitherTest.class (.txt) < prev    next >
Encoding:
Java Class File  |  1995-10-12  |  5.3 KB  |  239 lines

  1. import java.applet.Applet;
  2. import java.awt.BorderLayout;
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Frame;
  6. import java.awt.Image;
  7. import java.awt.Window;
  8. import java.awt.image.ColorModel;
  9. import java.awt.image.MemoryImageSource;
  10.  
  11. public class DitherTest extends Applet implements Runnable {
  12.    static final int NOOP = 0;
  13.    static final int RED = 1;
  14.    static final int GREEN = 2;
  15.    static final int BLUE = 3;
  16.    static final int ALPHA = 4;
  17.    static final int SATURATION = 5;
  18.    Thread kicker;
  19.    DitherControls XControls;
  20.    DitherControls YControls;
  21.    DitherCanvas canvas;
  22.  
  23.    public void init() {
  24.       int[] xvals = new int[2];
  25.       int[] yvals = new int[2];
  26.  
  27.       String var1;
  28.       try {
  29.          var1 = ((Applet)this).getParameter("xaxis");
  30.       } catch (Exception var8) {
  31.          var1 = null;
  32.       }
  33.  
  34.       String var2;
  35.       try {
  36.          var2 = ((Applet)this).getParameter("yaxis");
  37.       } catch (Exception var7) {
  38.          var2 = null;
  39.       }
  40.  
  41.       if (var1 == null) {
  42.          var1 = "red";
  43.       }
  44.  
  45.       if (var2 == null) {
  46.          var2 = "blue";
  47.       }
  48.  
  49.       int xmethod = this.colormethod(var1, xvals);
  50.       int ymethod = this.colormethod(var2, yvals);
  51.       ((Container)this).setLayout(new BorderLayout());
  52.       this.XControls = new DitherControls(this, xvals[0], xvals[1], xmethod, false);
  53.       this.YControls = new DitherControls(this, yvals[0], yvals[1], ymethod, true);
  54.       this.YControls.addRenderButton();
  55.       ((Container)this).add("North", this.XControls);
  56.       ((Container)this).add("South", this.YControls);
  57.       ((Container)this).add("Center", this.canvas = new DitherCanvas());
  58.    }
  59.  
  60.    public synchronized void start() {
  61.       if (this.canvas.getImage() == null) {
  62.          this.kicker = new Thread(this);
  63.          this.kicker.start();
  64.       }
  65.  
  66.    }
  67.  
  68.    public synchronized void stop() {
  69.       try {
  70.          if (this.kicker != null) {
  71.             this.kicker.stop();
  72.          }
  73.       } catch (Exception var1) {
  74.       }
  75.  
  76.       this.kicker = null;
  77.    }
  78.  
  79.    public void restart() {
  80.       this.stop();
  81.       this.canvas.setImage((Image)null);
  82.       this.start();
  83.    }
  84.  
  85.    public static void main(String[] args) {
  86.       Frame f = new Frame("ArcTest");
  87.       DitherTest ditherTest = new DitherTest();
  88.       ditherTest.init();
  89.       ((Container)f).add("Center", ditherTest);
  90.       ((Window)f).pack();
  91.       ((Window)f).show();
  92.       ditherTest.start();
  93.    }
  94.  
  95.    int colormethod(String s, int[] vals) {
  96.       int method = 0;
  97.       if (s == null) {
  98.          s = "";
  99.       }
  100.  
  101.       String lower = s.toLowerCase();
  102.       if (lower.startsWith("red")) {
  103.          method = 1;
  104.          lower = lower.substring(3);
  105.       } else if (lower.startsWith("green")) {
  106.          method = 2;
  107.          lower = lower.substring(5);
  108.       } else if (lower.startsWith("blue")) {
  109.          method = 3;
  110.          lower = lower.substring(4);
  111.       } else if (lower.startsWith("alpha")) {
  112.          method = 4;
  113.          lower = lower.substring(4);
  114.       } else if (lower.startsWith("saturation")) {
  115.          method = 5;
  116.          lower = lower.substring(10);
  117.       }
  118.  
  119.       if (method == 0) {
  120.          vals[0] = 0;
  121.          vals[1] = 0;
  122.          return method;
  123.       } else {
  124.          int begval = 0;
  125.          int endval = 255;
  126.  
  127.          try {
  128.             int dash = lower.indexOf(45);
  129.             if (dash < 0) {
  130.                begval = endval = Integer.parseInt(lower);
  131.             } else {
  132.                begval = Integer.parseInt(lower.substring(0, dash));
  133.                endval = Integer.parseInt(lower.substring(dash + 1));
  134.             }
  135.          } catch (Exception var8) {
  136.          }
  137.  
  138.          if (begval < 0) {
  139.             begval = 0;
  140.          }
  141.  
  142.          if (endval < 0) {
  143.             endval = 0;
  144.          }
  145.  
  146.          if (begval > 255) {
  147.             begval = 255;
  148.          }
  149.  
  150.          if (endval > 255) {
  151.             endval = 255;
  152.          }
  153.  
  154.          vals[0] = begval;
  155.          vals[1] = endval;
  156.          return method;
  157.       }
  158.    }
  159.  
  160.    void applymethod(int[] c, int method, int step, int total, int[] vals) {
  161.       if (method != 0) {
  162.          int val = total < 2 ? vals[0] : vals[0] + (vals[1] - vals[0]) * step / (total - 1);
  163.          switch (method) {
  164.             case 1:
  165.                c[0] = val;
  166.                return;
  167.             case 2:
  168.                c[1] = val;
  169.                return;
  170.             case 3:
  171.                c[2] = val;
  172.                return;
  173.             case 4:
  174.                c[3] = val;
  175.                return;
  176.             case 5:
  177.                int max = Math.max(Math.max(c[0], c[1]), c[2]);
  178.                int min = max * (255 - val) / 255;
  179.                if (c[0] == 0) {
  180.                   c[0] = min;
  181.                }
  182.  
  183.                if (c[1] == 0) {
  184.                   c[1] = min;
  185.                }
  186.  
  187.                if (c[2] == 0) {
  188.                   c[2] = min;
  189.                   return;
  190.                }
  191.             default:
  192.          }
  193.       }
  194.    }
  195.  
  196.    public void run() {
  197.       Thread me = Thread.currentThread();
  198.       me.setPriority(4);
  199.       int width = this.canvas.size().width;
  200.       int height = this.canvas.size().height;
  201.       int[] xvals = new int[2];
  202.       int[] yvals = new int[2];
  203.       int xmethod = this.XControls.getParams(xvals);
  204.       int ymethod = this.YControls.getParams(yvals);
  205.       int[] pixels = new int[width * height];
  206.       int[] c = new int[4];
  207.       int index = 0;
  208.  
  209.       for(int j = 0; j < height; ++j) {
  210.          for(int i = 0; i < width; ++i) {
  211.             c[0] = c[1] = c[2] = 0;
  212.             c[3] = 255;
  213.             if (xmethod < ymethod) {
  214.                this.applymethod(c, xmethod, i, width, xvals);
  215.                this.applymethod(c, ymethod, j, height, yvals);
  216.             } else {
  217.                this.applymethod(c, ymethod, j, height, yvals);
  218.                this.applymethod(c, xmethod, i, width, xvals);
  219.             }
  220.  
  221.             pixels[index++] = c[3] << 24 | c[0] << 16 | c[1] << 8 | c[2];
  222.             if (this.kicker != me) {
  223.                return;
  224.             }
  225.          }
  226.       }
  227.  
  228.       this.newImage(me, width, height, pixels);
  229.    }
  230.  
  231.    synchronized void newImage(Thread me, int width, int height, int[] pixels) {
  232.       if (this.kicker == me) {
  233.          Image img = ((Component)this).createImage(new MemoryImageSource(width, height, ColorModel.getRGBdefault(), pixels, 0, width));
  234.          this.canvas.setImage(img);
  235.          this.kicker = null;
  236.       }
  237.    }
  238. }
  239.